package com.yly.common.basic.dao;

import java.util.List;
import java.util.Map;

import com.yly.common.basic.pojo.PageParameter;
import com.yly.utils.ThreadLocalUtil;

public class BasicSupportDao extends BasicDao {
	
	
	
	/**
	 * <p>Title: 查询返回所有记录</p>
	 * <p>Description: 查询返回符合SQL的所有记录</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return List 结果集List类型
	 */
	@SuppressWarnings("rawtypes")
	public List selectList(String statementId, Object param) {
		return this.getSqlSession().selectList(statementId, param);
	}
	
	/**
	 * <p>Title: 查询返回所有记录</p>
	 * <p>Description: 查询返回符合SQL的所有记录</p>
	 * @param param 参数
	 * @return List 结果集List类型
	 */
	@SuppressWarnings("rawtypes")
	public List selectList(Object param) {
		String _methodName = new Exception().getStackTrace()[1].getMethodName();
		return this.selectList(_methodName, param);
	}
	
//	/**
//	 * <p>Title: 返回分页后的数据</p>
//	 * <p>Description: 返回分页后的数据</p>
//	 * @param statementId 对应SQL的ID
//	 * @param param 参数
//	 * @return 结果集List类型
//	 */
//	@SuppressWarnings({ "rawtypes", "unchecked" })
//	public List selectListPage(String statementId, Object param) {
//		Map tmpMap = (Map) param;
//		tmpMap.put("_isPage", "1");
//		String _s = (String) tmpMap.get("_s");
//		String _k = "0";
//		if(tmpMap.get("_b") != null){
//			String _b = (String) tmpMap.get("_b");
//			int pageNum = Integer.parseInt(_b) - 1;
//			int pageSize = Integer.parseInt(_s);
//			_k = String.valueOf(pageNum * pageSize);
//		}else{
//			tmpMap.put("_b","1"); 
//		}
//		tmpMap.put("_k", _k);
//		tmpMap.remove("_count");
//		List list = this.selectList(statementId, param);
//
//		tmpMap.remove("_s");
//		tmpMap.put("_count", "");
//		Map mpCount = this.selectOneMap(statementId, param);
//
//		tmpMap.put("_s", _s);
//		String _count = String.valueOf(mpCount.get("_count"));
//		tmpMap.put("_count", _count);
//		return list;
//	}
//	
//	/**
//	 * <p>Title: 返回分页后的数据</p>
//	 * <p>Description: 返回分页后的数据</p>
//	 * @param param 参数
//	 * @return 结果集List类型
//	 */
//	@SuppressWarnings("rawtypes")
//	public List selectListPage(Object param) {
//		String _methodName = new Exception().getStackTrace()[1].getMethodName();
//		return this.selectListPage(_methodName, param);
//	}
	
	/**
	 * <p>Title: 返回分页后的数据</p>
	 * <p>Description: 返回分页后的数据</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return 结果集List类型
	 */
	@SuppressWarnings("rawtypes")
	public List selectListPage(String statementId, Object param) {
		ThreadLocalUtil.set("param.isPage", true);
		List list = this.selectList(statementId, param);
		ThreadLocalUtil.set("param.isPage", false);
		return list;
	}
	
	/**
	 * <p>Title: 返回分页后的数据</p>
	 * <p>Description: 返回分页后的数据</p>
	 * @param param 参数
	 * @return 结果集List类型
	 */
	@SuppressWarnings("rawtypes")
	public List selectListPage(Object param) {
		String _methodName = new Exception().getStackTrace()[1].getMethodName();
		return this.selectListPage(_methodName, param);
	}
	
	
	/**
	 * <p>Title: 查询一条记录</p>
	 * <p>Description: 查询第一条记录，如果没有则返回<b>null</b></p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return Map 返回<b>第一条</b>结果
	 */
	@SuppressWarnings("rawtypes")
	public Map selectOneMap(String statementId, Object param){
		List countList = this.selectList(statementId, param);
		return (Map)countList.get(0);
	}
	
	/**
	 * <p>Title: 查询一条记录</p>
	 * <p>Description: 查询第一条记录，如果没有则返回<b>null</b></p>
	 * @param param 参数
	 * @return Map 返回<b>第一条</b>结果
	 */
	@SuppressWarnings("rawtypes")
	public Map selectOneMap(Object param){
		String _methodName = new Exception().getStackTrace()[1].getMethodName();
		return this.selectOneMap(_methodName, param);
	}
	
	
	
	
	/**
	 * <p>Title: 新增数据</p>
	 * <p>Description: 新增数据，返回影响条数</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return int 新增数据,返回影响条数
	 */
	public int insertNum(String statementId, Object param){
		return this.getSqlSession().insert(statementId, param);
	}
	
	/**
	 * <p>Title: 新增数据</p>
	 * <p>Description: 新增数据，返回影响条数</p>
	 * @param param 参数
	 * @return int 新增数据,返回影响条数
	 */
	public int insertNum(Object param){
		String _methodName = new Exception().getStackTrace()[1].getMethodName();
		return this.insertNum(_methodName, param);
	}
	
	/**
	 * <p>Title: 新增数据</p>
	 * <p>Description: 新增数据，如果影响条数为0则返回false，否则返回true</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return 如果影响条数为0则返回false，否则返回true
	 */
	public boolean insert(String statementId, Object param){
		return this.insertNum(statementId, param) > 0 ? true : false;
	}
	
	/**
	 * <p>Title: 新增数据</p>
	 * <p>Description: 新增数据，如果影响条数为0则返回false，否则返回true</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return boolean 如果影响条数为0则返回false，否则返回true
	 */
	public boolean insert(Object param){
		String _methodName = new Exception().getStackTrace()[1].getMethodName();
		return this.insert(_methodName, param);
	}
	
	
	
	
	/**
	 * <p>Title: 更新数据</p>
	 * <p>Description: 更新数据，返回影响条数</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return boolean 返回影响条数
	 */
	public int updateNum(String statementId, Object param){
		return this.getSqlSession().update(statementId, param);
	}
	
	/**
	 * <p>Title: 更新数据</p>
	 * <p>Description: 更新数据，返回影响条数</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return boolean 返回影响条数
	 */
	public int updateNum(Object param){
		String _methodName = new Exception().getStackTrace()[1].getMethodName();
		return this.updateNum(_methodName, param);
	}
	
	/**
	 * <p>Title: 更新数据</p>
	 * <p>Description: 更新数据，如果影响条数为0则返回false，否则返回true</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return boolean 如果影响条数为0则返回false，否则返回true
	 */
	public boolean update(String statementId, Object param){
		return this.updateNum(statementId, param) > 0 ? true : false;
	}
	
	/**
	 * <p>Title: 更新数据</p>
	 * <p>Description: 更新数据，如果影响条数为0则返回false，否则返回true</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return boolean 如果影响条数为0则返回false，否则返回true
	 */
	public boolean update(Object param){
		String _methodName = new Exception().getStackTrace()[1].getMethodName();
		return this.update(_methodName, param);
	}
	
	
	
	/**
	 * <p>Title: 删除数据</p>
	 * <p>Description: 删除数据，返回影响条数</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return boolean 返回影响条数
	 */
	public int deleteNum(String statementId, Object param){
		return this.getSqlSession().delete(statementId, param);
	}
	
	/**
	 * <p>Title: 删除数据</p>
	 * <p>Description: 删除数据，返回影响条数</p>
	 * @param param 参数
	 * @return boolean 返回影响条数
	 */
	public int deleteNum(Object param){
		String _methodName = new Exception().getStackTrace()[1].getMethodName();
		return this.deleteNum(_methodName, param);
	}
	
	/**
	 * <p>Title: 删除数据</p>
	 * <p>Description: 删除数据，如果影响条数为0则返回false，否则返回true</p>
	 * @param statementId 对应SQL的ID
	 * @param param 参数
	 * @return boolean 如果影响条数为0则返回false，否则返回true
	 */
	public boolean delete(String statementId, Object param){
		return this.deleteNum(statementId, param) > 0 ? true : false;
	}
	
	/**
	 * <p>Title: 删除数据</p>
	 * <p>Description: 删除数据，如果影响条数为0则返回false，否则返回true</p>
	 * @param param 参数
	 * @return boolean 如果影响条数为0则返回false，否则返回true
	 */
	public boolean delete(Object param){
		String _methodName = new Exception().getStackTrace()[1].getMethodName();
		return this.delete(_methodName, param);
	}
	
	
	
}
